fit_plane_surface
             0      0.05       0.1      0.15       0.2
0    0.6895831 0.7139563 0.7383296 0.7627028 0.7870761
0.05 0.7141167 0.7384900 0.7628632 0.7872365 0.8116097
0.1  0.7386504 0.7630236 0.7873969 0.8117701 0.8361434
0.15 0.7631840 0.7875573 0.8119305 0.8363038 0.8606770
          0.25       0.3      0.35       0.4      0.45
0    0.8114493 0.8358226 0.8601958 0.8845690 0.9089423
0.05 0.8359830 0.8603562 0.8847295 0.9091027 0.9334759
0.1  0.8605166 0.8848899 0.9092631 0.9336364 0.9580096
0.15 0.8850503 0.9094235 0.9337968 0.9581700 0.9825433
           0.5      0.55      0.6     0.65      0.7     0.75
0    0.9333155 0.9576888 0.982062 1.006435 1.030809 1.055182
0.05 0.9578492 0.9822224 1.006596 1.030969 1.055342 1.079715
0.1  0.9823828 1.0067561 1.031129 1.055503 1.079876 1.104249
0.15 1.0069165 1.0312897 1.055663 1.080036 1.104409 1.128783
          0.8     0.85      0.9     0.95        1     1.05
0    1.079555 1.103928 1.128301 1.152675 1.177048 1.201421
0.05 1.104089 1.128462 1.152835 1.177208 1.201582 1.225955
0.1  1.128622 1.152996 1.177369 1.201742 1.226115 1.250489
0.15 1.153156 1.177529 1.201902 1.226276 1.250649 1.275022
          1.1     1.15      1.2     1.25      1.3     1.35
0    1.225794 1.250168 1.274541 1.298914 1.323287 1.347661
0.05 1.250328 1.274701 1.299075 1.323448 1.347821 1.372194
0.1  1.274862 1.299235 1.323608 1.347982 1.372355 1.396728
0.15 1.299395 1.323769 1.348142 1.372515 1.396888 1.421262
          1.4     1.45      1.5     1.55      1.6     1.65
0    1.372034 1.396407 1.420780 1.445154 1.469527 1.493900
0.05 1.396568 1.420941 1.445314 1.469687 1.494061 1.518434
0.1  1.421101 1.445475 1.469848 1.494221 1.518594 1.542967
0.15 1.445635 1.470008 1.494381 1.518755 1.543128 1.567501
          1.7     1.75      1.8     1.85      1.9     1.95
0    1.518273 1.542647 1.567020 1.591393 1.615766 1.640140
0.05 1.542807 1.567180 1.591554 1.615927 1.640300 1.664673
0.1  1.567341 1.591714 1.616087 1.640460 1.664834 1.689207
0.15 1.591874 1.616248 1.640621 1.664994 1.689367 1.713741
            2     2.05      2.1     2.15      2.2     2.25
0    1.664513 1.688886 1.713259 1.737633 1.762006 1.786379
0.05 1.689047 1.713420 1.737793 1.762166 1.786540 1.810913
0.1  1.713580 1.737953 1.762327 1.786700 1.811073 1.835446
0.15 1.738114 1.762487 1.786860 1.811234 1.835607 1.859980
          2.3     2.35      2.4     2.45      2.5     2.55
0    1.810752 1.835126 1.859499 1.883872 1.908245 1.932619
0.05 1.835286 1.859659 1.884033 1.908406 1.932779 1.957152
0.1  1.859820 1.884193 1.908566 1.932939 1.957313 1.981686
0.15 1.884353 1.908727 1.933100 1.957473 1.981846 2.006220
          2.6     2.65      2.7     2.75      2.8     2.85
0    1.956992 1.981365 2.005738 2.030112 2.054485 2.078858
0.05 1.981525 2.005899 2.030272 2.054645 2.079018 2.103392
0.1  2.006059 2.030432 2.054806 2.079179 2.103552 2.127925
0.15 2.030593 2.054966 2.079339 2.103713 2.128086 2.152459
          2.9     2.95        3     3.05      3.1     3.15
0    2.103231 2.127605 2.151978 2.176351 2.200724 2.225098
0.05 2.127765 2.152138 2.176511 2.200885 2.225258 2.249631
0.1  2.152299 2.176672 2.201045 2.225418 2.249792 2.274165
0.15 2.176832 2.201206 2.225579 2.249952 2.274325 2.298698
          3.2     3.25      3.3     3.35      3.4     3.45
0    2.249471 2.273844 2.298217 2.322591 2.346964 2.371337
0.05 2.274004 2.298378 2.322751 2.347124 2.371497 2.395871
0.1  2.298538 2.322911 2.347285 2.371658 2.396031 2.420404
0.15 2.323072 2.347445 2.371818 2.396191 2.420565 2.444938
          3.5     3.55      3.6     3.65      3.7     3.75
0    2.395710 2.420083 2.444457 2.468830 2.493203 2.517576
0.05 2.420244 2.444617 2.468990 2.493364 2.517737 2.542110
0.1  2.444778 2.469151 2.493524 2.517897 2.542271 2.566644
0.15 2.469311 2.493684 2.518058 2.542431 2.566804 2.591177
          3.8     3.85      3.9     3.95        4     4.05
0    2.541950 2.566323 2.590696 2.615069 2.639443 2.663816
0.05 2.566483 2.590857 2.615230 2.639603 2.663976 2.688350
0.1  2.591017 2.615390 2.639764 2.664137 2.688510 2.712883
0.15 2.615551 2.639924 2.664297 2.688670 2.713044 2.737417
          4.1     4.15      4.2     4.25      4.3     4.35
0    2.688189 2.712562 2.736936 2.761309 2.785682 2.810055
0.05 2.712723 2.737096 2.761469 2.785843 2.810216 2.834589
0.1  2.737256 2.761630 2.786003 2.810376 2.834749 2.859123
0.15 2.761790 2.786163 2.810537 2.834910 2.859283 2.883656
          4.4     4.45      4.5     4.55      4.6     4.65
0    2.834429 2.858802 2.883175 2.907548 2.931922 2.956295
0.05 2.858962 2.883336 2.907709 2.932082 2.956455 2.980829
0.1  2.883496 2.907869 2.932242 2.956616 2.980989 3.005362
0.15 2.908030 2.932403 2.956776 2.981149 3.005523 3.029896
          4.7     4.75      4.8     4.85      4.9     4.95
0    2.980668 3.005041 3.029415 3.053788 3.078161 3.102534
0.05 3.005202 3.029575 3.053948 3.078322 3.102695 3.127068
0.1  3.029735 3.054109 3.078482 3.102855 3.127228 3.151602
0.15 3.054269 3.078642 3.103016 3.127389 3.151762 3.176135
            5     5.05      5.1     5.15      5.2     5.25
0    3.126908 3.151281 3.175654 3.200027 3.224401 3.248774
0.05 3.151441 3.175815 3.200188 3.224561 3.248934 3.273307
0.1  3.175975 3.200348 3.224721 3.249095 3.273468 3.297841
0.15 3.200509 3.224882 3.249255 3.273628 3.298002 3.322375
          5.3     5.35      5.4     5.45      5.5     5.55
0    3.273147 3.297520 3.321894 3.346267 3.370640 3.395013
0.05 3.297681 3.322054 3.346427 3.370800 3.395174 3.419547
0.1  3.322214 3.346588 3.370961 3.395334 3.419707 3.444081
0.15 3.346748 3.371121 3.395495 3.419868 3.444241 3.468614
          5.6     5.65      5.7     5.75      5.8     5.85
0    3.419387 3.443760 3.468133 3.492506 3.516880 3.541253
0.05 3.443920 3.468293 3.492667 3.517040 3.541413 3.565786
0.1  3.468454 3.492827 3.517200 3.541574 3.565947 3.590320
0.15 3.492988 3.517361 3.541734 3.566107 3.590480 3.614854
          5.9     5.95        6     6.05      6.1     6.15
0    3.565626 3.589999 3.614373 3.638746 3.663119 3.687492
0.05 3.590160 3.614533 3.638906 3.663279 3.687653 3.712026
0.1  3.614693 3.639067 3.663440 3.687813 3.712186 3.736560
0.15 3.639227 3.663600 3.687973 3.712347 3.736720 3.761093
          6.2     6.25      6.3     6.35      6.4     6.45
0    3.711865 3.736239 3.760612 3.784985 3.809358 3.833732
0.05 3.736399 3.760772 3.785146 3.809519 3.833892 3.858265
0.1  3.760933 3.785306 3.809679 3.834053 3.858426 3.882799
0.15 3.785466 3.809840 3.834213 3.858586 3.882959 3.907333
          6.5     6.55      6.6     6.65      6.7     6.75
0    3.858105 3.882478 3.906851 3.931225 3.955598 3.979971
0.05 3.882639 3.907012 3.931385 3.955758 3.980132 4.004505
0.1  3.907172 3.931546 3.955919 3.980292 4.004665 4.029038
0.15 3.931706 3.956079 3.980452 4.004826 4.029199 4.053572
          6.8     6.85      6.9     6.95        7     7.05
0    4.004344 4.028718 4.053091 4.077464 4.101837 4.126211
0.05 4.028878 4.053251 4.077625 4.101998 4.126371 4.150744
0.1  4.053412 4.077785 4.102158 4.126531 4.150905 4.175278
0.15 4.077945 4.102319 4.126692 4.151065 4.175438 4.199812
          7.1     7.15      7.2     7.25      7.3     7.35
0    4.150584 4.174957 4.199330 4.223704 4.248077 4.272450
0.05 4.175118 4.199491 4.223864 4.248237 4.272611 4.296984
0.1  4.199651 4.224024 4.248398 4.272771 4.297144 4.321517
0.15 4.224185 4.248558 4.272931 4.297305 4.321678 4.346051
          7.4     7.45      7.5     7.55      7.6     7.65
0    4.296823 4.321197 4.345570 4.369943 4.394316 4.418690
0.05 4.321357 4.345730 4.370104 4.394477 4.418850 4.443223
0.1  4.345891 4.370264 4.394637 4.419010 4.443384 4.467757
0.15 4.370424 4.394798 4.419171 4.443544 4.467917 4.492291
          7.7     7.75      7.8     7.85      7.9     7.95
0    4.443063 4.467436 4.491809 4.516183 4.540556 4.564929
0.05 4.467596 4.491970 4.516343 4.540716 4.565089 4.589463
0.1  4.492130 4.516503 4.540877 4.565250 4.589623 4.613996
0.15 4.516664 4.541037 4.565410 4.589784 4.614157 4.638530
            8     8.05      8.1     8.15      8.2     8.25
0    4.589302 4.613676 4.638049 4.662422 4.686795 4.711169
0.05 4.613836 4.638209 4.662582 4.686956 4.711329 4.735702
0.1  4.638370 4.662743 4.687116 4.711489 4.735863 4.760236
0.15 4.662903 4.687277 4.711650 4.736023 4.760396 4.784770
          8.3     8.35      8.4     8.45      8.5     8.55
0    4.735542 4.759915 4.784288 4.808662 4.833035 4.857408
0.05 4.760075 4.784449 4.808822 4.833195 4.857568 4.881942
0.1  4.784609 4.808982 4.833356 4.857729 4.882102 4.906475
0.15 4.809143 4.833516 4.857889 4.882262 4.906636 4.931009
          8.6     8.65      8.7     8.75      8.8     8.85
0    4.881781 4.906155 4.930528 4.954901 4.979274 5.003647
0.05 4.906315 4.930688 4.955061 4.979435 5.003808 5.028181
0.1  4.930849 4.955222 4.979595 5.003968 5.028342 5.052715
0.15 4.955382 4.979755 5.004129 5.028502 5.052875 5.077248
          8.9     8.95        9      9.05       9.1      9.15
0    5.028021 5.052394 5.076767  5.101140  5.125514  5.149887
0.05 5.052554 5.076928 5.101301  5.125674  5.150047  5.174421
0.1  5.077088 5.101461 5.125835  5.150208  5.174581  5.198954
0.15 5.101622 5.125995 5.150368  5.174741  5.199115  5.223488
           9.2      9.25       9.3      9.35       9.4
0     5.174260  5.198633  5.223007  5.247380  5.271753
0.05  5.198794  5.223167  5.247540  5.271914  5.296287
0.1   5.223328  5.247701  5.272074  5.296447  5.320820
0.15  5.247861  5.272234  5.296608  5.320981  5.345354
          9.45       9.5      9.55       9.6      9.65
0     5.296126  5.320500  5.344873  5.369246  5.393619
0.05  5.320660  5.345033  5.369407  5.393780  5.418153
0.1   5.345194  5.369567  5.393940  5.418313  5.442687
0.15  5.369727  5.394101  5.418474  5.442847  5.467220
           9.7      9.75       9.8      9.85       9.9
0     5.417993  5.442366  5.466739  5.491112  5.515486
0.05  5.442526  5.466900  5.491273  5.515646  5.540019
0.1   5.467060  5.491433  5.515806  5.540180  5.564553
0.15  5.491594  5.515967  5.540340  5.564713  5.589087
          9.95        10
0     5.539859  5.564232
0.05  5.564393  5.588766
0.1   5.588926  5.613299
0.15  5.613460  5.637833
 [ erreichte getOption("max.print") --  197 Zeilen ausgelassen ]
x1 <- runif(100, min = 0, max = 10)
hist(x1)

x2 <- runif(100, min = 0, max = 10)
y <- 1 + x1 + x2 + rnorm(100) 
y <- y/max(y)*10# %>% scale()
dat <- data.frame(x1, x2, y)
fit_plane <- function(data){
  
  fit_plane <- lm(x2 ~ 1 + x1 + y, data = data)
  
  #Graph Resolution (more important for more complex shapes)
  graph_reso <- 0.05
  
  #Setup Axis
  axis_x <- seq(0, 10, by = graph_reso)
  axis_y <- seq(min(y), max(y), by = graph_reso)
  
  #Sample points
  fit_plane_surface <- expand.grid(
    x1 = axis_x,
    y = axis_y,
    KEEP.OUT.ATTRS = F
  )
  
  fit_plane_surface$x2 <- predict.lm(fit_plane, newdata = fit_plane_surface)
  library(reshape2)
  fit_plane_surface <- acast(fit_plane_surface, y ~ x1, value.var = "x2")
  
  return(fit_plane_surface)
}
fit_plane_surface <- fit_plane(dat)
plot_plane <- function(data, surface){
  library(plotly)
  
  graph_reso <- 0.05
  axis_x <- seq(0, 10, by = graph_reso)
  axis_y <- seq(min(y), max(y), by = graph_reso)
  
  
  income_plot <- plot_ly(
    dat,
    x = ~ x1,
    y = ~ y,
    z = ~ x2,
    #text = ~ cntry,
    type = "scatter3d",
    mode = "markers", width = 900, height = 700
    #marker = list(color = hcolors)
  )
  
  income_plot2 <- add_trace(
    p = income_plot,
    z = fit_plane_surface,
    x = axis_x,
    y = axis_y,
    type = "surface"
  )
  return(income_plot2)
}
plot_plane(dat, fit_plane_surface)
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'

turn x2 and y

fit_plane <- function(data){
  
  fit_plane <- lm(y ~ 1 + x1 + x2, data = data)
  
  #Graph Resolution (more important for more complex shapes)
  graph_reso <- 0.05
  
  #Setup Axis
  axis_x1 <- seq(0, 10, by = graph_reso)
  axis_x2 <- seq(0, 10, by = graph_reso)
  
  #Sample points
  fit_plane_surface <- expand.grid(
    x1 = axis_x1,
    x2 = axis_x2,
    KEEP.OUT.ATTRS = F
  )
  
  fit_plane_surface$y <- predict.lm(fit_plane, newdata = fit_plane_surface)
  library(reshape2)
  fit_plane_surface <- acast(fit_plane_surface, x2 ~ x1, value.var = "y")
  
  return(fit_plane_surface)
}
fit_plane_surface <- fit_plane(dat)
plot_plane <- function(data, surface){
  library(plotly)
  
  graph_reso <- 0.05
  axis_x1 <- seq(0, 10, by = graph_reso)
  axis_x2 <- seq(0, 10, by = graph_reso)
  
  
  income_plot <- plot_ly(
    dat,
    x = ~ x1,
    y = ~ x2,
    z = ~ y,
    #text = ~ cntry,
    type = "scatter3d",
    mode = "markers", width = 900, height = 700
    #marker = list(color = hcolors)
  )
  
  income_plot2 <- add_trace(
    p = income_plot,
    z = fit_plane_surface,
    x = axis_x1,
    y = axis_x2,
    type = "surface"
  )
  return(income_plot2)
}
plot_plane(dat, fit_plane_surface)
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeShkcGx5cikKCmxvYWQoImVzc193b3Jrc2hvcC5SZGF0YSIpCgplc3NfZ2VyIDwtIGVzcyAlPiUKICBmaWx0ZXIoY291bnRyeSA9PSAiREUiKQoKI2xvYWQgZGF0YQplc3NfcGxhbmUgPC0gZXNzX2dlciAlPiUKICBzZWxlY3QoZWR1LCBpbW1fZWNvbiwgaW5jb21lKSAlPiUKICAjbXV0YXRlKGltbV9lY29uID0gc2NhbGUoaW1tX2Vjb24pKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgc2FtcGxlX24oc2l6ZSA9IDEwMCkKICAjbXV0YXRlKHBvbF9pbnRlciA9IGlmZWxzZShwb2xfaW50ZXIgPT0gIkZlbWFsZSIsIDEsIDApKQoKZml0X3BsYW5lIDwtIGxtKGluY29tZSB+IDEgKyBlZHUgKyBpbW1fZWNvbiwgZGF0YSA9IGVzc19wbGFuZSkKCiNHcmFwaCBSZXNvbHV0aW9uIChtb3JlIGltcG9ydGFudCBmb3IgbW9yZSBjb21wbGV4IHNoYXBlcykKZ3JhcGhfcmVzbyA8LSAwLjA1CgojU2V0dXAgQXhpcwpheGlzX3ggPC0gc2VxKDAsIDEwLCBieSA9IGdyYXBoX3Jlc28pCmF4aXNfeSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKCiNTYW1wbGUgcG9pbnRzCmZpdF9wbGFuZV9zdXJmYWNlIDwtIGV4cGFuZC5ncmlkKAogIGVkdSA9IGF4aXNfeCwKICBpbW1fZWNvbiA9IGF4aXNfeSwKICBLRUVQLk9VVC5BVFRSUyA9IEYKKQoKZml0X3BsYW5lX3N1cmZhY2UkaW5jb21lIDwtIHByZWRpY3QubG0oZml0X3BsYW5lLCBuZXdkYXRhID0gZml0X3BsYW5lX3N1cmZhY2UpCmxpYnJhcnkocmVzaGFwZTIpCmZpdF9wbGFuZV9zdXJmYWNlIDwtIGFjYXN0KGZpdF9wbGFuZV9zdXJmYWNlLCBpbW1fZWNvbiB+IGVkdSwgdmFsdWUudmFyID0gImluY29tZSIpCgojaGNvbG9ycz1jKCJibHVlIiwgInJlZCIpW2RhdDEkd2VhbHRoXQpsaWJyYXJ5KHBsb3RseSkKCmluY29tZV9wbG90IDwtIHBsb3RfbHkoCiAgZXNzX3BsYW5lLAogIHggPSB+IGVkdSwKICB5ID0gfiBpbmNvbWUsCiAgeiA9IH4gaW1tX2Vjb24sCiAgI3RleHQgPSB+IGNudHJ5LAogIHR5cGUgPSAic2NhdHRlcjNkIiwKICBtb2RlID0gIm1hcmtlcnMiLCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNzAwCiAgI21hcmtlciA9IGxpc3QoY29sb3IgPSBoY29sb3JzKQopCgppbmNvbWVfcGxvdDIgPC0gYWRkX3RyYWNlKAogIHAgPSBpbmNvbWVfcGxvdCwKICB6ID0gZml0X3BsYW5lX3N1cmZhY2UsCiAgeCA9IGF4aXNfeCwKICB5ID0gYXhpc195LAogIHR5cGUgPSAic3VyZmFjZSIKKQoKaW5jb21lX3Bsb3QyCmBgYAoKCgpgYGB7cn0KeDEgPC0gcnVuaWYoMTAwLCBtaW4gPSAwLCBtYXggPSAxMCkKaGlzdCh4MSkKCngyIDwtIHJ1bmlmKDEwMCwgbWluID0gMCwgbWF4ID0gMTApCgp5IDwtIDEgKyB4MSArIHgyICsgcm5vcm0oMTAwKSAKeSA8LSB5L21heCh5KSoxMCMgJT4lIHNjYWxlKCkKCmRhdCA8LSBkYXRhLmZyYW1lKHgxLCB4MiwgeSkKYGBgCgpgYGB7cn0KZml0X3BsYW5lIDwtIGZ1bmN0aW9uKGRhdGEpewogIAogIGZpdF9wbGFuZSA8LSBsbSh4MiB+IDEgKyB4MSArIHksIGRhdGEgPSBkYXRhKQogIAogICNHcmFwaCBSZXNvbHV0aW9uIChtb3JlIGltcG9ydGFudCBmb3IgbW9yZSBjb21wbGV4IHNoYXBlcykKICBncmFwaF9yZXNvIDwtIDAuMDUKICAKICAjU2V0dXAgQXhpcwogIGF4aXNfeCA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3kgPC0gc2VxKG1pbih5KSwgbWF4KHkpLCBieSA9IGdyYXBoX3Jlc28pCiAgCiAgI1NhbXBsZSBwb2ludHMKICBmaXRfcGxhbmVfc3VyZmFjZSA8LSBleHBhbmQuZ3JpZCgKICAgIHgxID0gYXhpc194LAogICAgeSA9IGF4aXNfeSwKICAgIEtFRVAuT1VULkFUVFJTID0gRgogICkKICAKICBmaXRfcGxhbmVfc3VyZmFjZSR4MiA8LSBwcmVkaWN0LmxtKGZpdF9wbGFuZSwgbmV3ZGF0YSA9IGZpdF9wbGFuZV9zdXJmYWNlKQogIGxpYnJhcnkocmVzaGFwZTIpCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gYWNhc3QoZml0X3BsYW5lX3N1cmZhY2UsIHkgfiB4MSwgdmFsdWUudmFyID0gIngyIikKICAKICByZXR1cm4oZml0X3BsYW5lX3N1cmZhY2UpCn0KCgpmaXRfcGxhbmVfc3VyZmFjZSA8LSBmaXRfcGxhbmUoZGF0KQoKCnBsb3RfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSwgc3VyZmFjZSl7CiAgbGlicmFyeShwbG90bHkpCiAgCiAgZ3JhcGhfcmVzbyA8LSAwLjA1CiAgYXhpc194IDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIGF4aXNfeSA8LSBzZXEobWluKHkpLCBtYXgoeSksIGJ5ID0gZ3JhcGhfcmVzbykKICAKICAKICBpbmNvbWVfcGxvdCA8LSBwbG90X2x5KAogICAgZGF0LAogICAgeCA9IH4geDEsCiAgICB5ID0gfiB5LAogICAgeiA9IH4geDIsCiAgICAjdGV4dCA9IH4gY250cnksCiAgICB0eXBlID0gInNjYXR0ZXIzZCIsCiAgICBtb2RlID0gIm1hcmtlcnMiLCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNzAwCiAgICAjbWFya2VyID0gbGlzdChjb2xvciA9IGhjb2xvcnMpCiAgKQogIAogIGluY29tZV9wbG90MiA8LSBhZGRfdHJhY2UoCiAgICBwID0gaW5jb21lX3Bsb3QsCiAgICB6ID0gZml0X3BsYW5lX3N1cmZhY2UsCiAgICB4ID0gYXhpc194LAogICAgeSA9IGF4aXNfeSwKICAgIHR5cGUgPSAic3VyZmFjZSIKICApCiAgcmV0dXJuKGluY29tZV9wbG90MikKfQoKcGxvdF9wbGFuZShkYXQsIGZpdF9wbGFuZV9zdXJmYWNlKQpgYGAKCgoKCiMjIHR1cm4geDIgYW5kIHkKCmBgYHtyfQpmaXRfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSl7CiAgCiAgZml0X3BsYW5lIDwtIGxtKHkgfiAxICsgeDEgKyB4MiwgZGF0YSA9IGRhdGEpCiAgCiAgI0dyYXBoIFJlc29sdXRpb24gKG1vcmUgaW1wb3J0YW50IGZvciBtb3JlIGNvbXBsZXggc2hhcGVzKQogIGdyYXBoX3Jlc28gPC0gMC4wNQogIAogICNTZXR1cCBBeGlzCiAgYXhpc194MSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3gyIDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIAogICNTYW1wbGUgcG9pbnRzCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gZXhwYW5kLmdyaWQoCiAgICB4MSA9IGF4aXNfeDEsCiAgICB4MiA9IGF4aXNfeDIsCiAgICBLRUVQLk9VVC5BVFRSUyA9IEYKICApCiAgCiAgZml0X3BsYW5lX3N1cmZhY2UkeSA8LSBwcmVkaWN0LmxtKGZpdF9wbGFuZSwgbmV3ZGF0YSA9IGZpdF9wbGFuZV9zdXJmYWNlKQogIGxpYnJhcnkocmVzaGFwZTIpCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gYWNhc3QoZml0X3BsYW5lX3N1cmZhY2UsIHgyIH4geDEsIHZhbHVlLnZhciA9ICJ5IikKICAKICByZXR1cm4oZml0X3BsYW5lX3N1cmZhY2UpCn0KCgpmaXRfcGxhbmVfc3VyZmFjZSA8LSBmaXRfcGxhbmUoZGF0KQoKCnBsb3RfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSwgc3VyZmFjZSl7CiAgbGlicmFyeShwbG90bHkpCiAgCiAgZ3JhcGhfcmVzbyA8LSAwLjA1CiAgYXhpc194MSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3gyIDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIAogIAogIGluY29tZV9wbG90IDwtIHBsb3RfbHkoCiAgICBkYXQsCiAgICB4ID0gfiB4MSwKICAgIHkgPSB+IHgyLAogICAgeiA9IH4geSwKICAgICN0ZXh0ID0gfiBjbnRyeSwKICAgIHR5cGUgPSAic2NhdHRlcjNkIiwKICAgIG1vZGUgPSAibWFya2VycyIsIHdpZHRoID0gOTAwLCBoZWlnaHQgPSA3MDAKICAgICNtYXJrZXIgPSBsaXN0KGNvbG9yID0gaGNvbG9ycykKICApCiAgCiAgaW5jb21lX3Bsb3QyIDwtIGFkZF90cmFjZSgKICAgIHAgPSBpbmNvbWVfcGxvdCwKICAgIHogPSBmaXRfcGxhbmVfc3VyZmFjZSwKICAgIHggPSBheGlzX3gxLAogICAgeSA9IGF4aXNfeDIsCiAgICB0eXBlID0gInN1cmZhY2UiCiAgKQogIHJldHVybihpbmNvbWVfcGxvdDIpCn0KCgpgYGAKCg==